package abrindoojogo.exemplos.thread;

import javax.swing.JFrame;

public class Controlador implements Runnable
{
    Contador contador;
    JFrame frame;
    Nave nave;

    public Controlador(JFrame frame, Contador contador, Nave nave)
    {
	this.frame = frame;
	this.contador = contador;
	this.nave = nave;
    }

    public void run()
    {
	long PULSOS_DESEJADOS_POR_SEGUNDO = 30;
	double NANOS_ESPERADOS_POR_PULSO = Contador.NANOS_EM_UM_SEGUNDO / PULSOS_DESEJADOS_POR_SEGUNDO;
	long nanoTimeDoProximoPulso = System.nanoTime();
	while (true)
	{

	    while (System.nanoTime() > nanoTimeDoProximoPulso)
	    {
		update();
		nanoTimeDoProximoPulso += NANOS_ESPERADOS_POR_PULSO;
	    }
	    try
	    {
		Thread.sleep(10);
	    } catch (Exception e)
	    {
	    }
	}
    }

    public void update()
    {
	contador.contaPulso();
	nave.x += 1;
	if (nave.x > frame.getWidth() + 30)
	{
	    nave.x = 0;
	}
    }
}
